package com.anguin.mylibrary.service;

import com.anguin.mylibrary.entity.UserEntity;
import jakarta.servlet.http.HttpSession;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

/**
 * UserService 接口定义了用户相关的业务逻辑操作。
 * 该接口包含了用户的注册、登录、密码验证、文件处理等功能的声明。
 */
public interface UserService
{

    /**
     * 根据用户名查找用户信息。
     *
     * @param username 用户名
     * @return UserEntity 如果找到用户则返回用户对象，如果找不到则返回 null
     */
    UserEntity findByUsername(String username);

    UserEntity findByEmail(String email);

    UserEntity findByPhoneNumber(String phoneNumber);

    UserEntity findByUserId(int uid);


    /**
     * 验证用户输入的原始密码与数据库中的加密密码是否匹配。
     *
     * @param rawPassword     用户输入的原始密码
     * @param encodedPassword 数据库中存储的加密密码
     * @return 如果密码匹配则返回 true，否则返回 false
     */
    boolean validatePassword(String rawPassword, String encodedPassword);

    /**
     * 更新用户的最后登录时间。
     *
     * @param userId 用户的 ID
     */
    void updateLastLogin(Integer userId);

    /**
     * 保存用户上传的头像文件。
     *
     * @param avatar 用户上传的头像文件
     * @return 返回保存后的头像文件路径
     */
    String saveAvatar(MultipartFile avatar);

    @Deprecated

    /**
     * 将 JSON 字符串解析为 UserEntity 对象。
     * @param userJson 包含用户信息的 JSON 字符串
     * @return 返回解析后的 UserEntity 对象
     */
    UserEntity parseUserJson(String userJson);

    @Transactional
    UserEntity updateUser(int userId, UserEntity user);

    /**
     * 请求登录
     *
     * @param username
     * @param password
     * @return
     */

    UserEntity login(String username, String password);

    /**
     * 注册新用户，保存用户信息到数据库。
     *
     * @param user 包含新用户信息的 UserEntity 对象
     */

    void register(UserEntity user);

    void changePassword(int userId, String oldPassword, String newPassword);

    void changePassword(int userId, String newPassword);

}
